package com.example.wifi2;

import android.app.Service;
import android.content.Intent;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiNetworkSuggestion;
import android.os.Build;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

import androidx.annotation.Nullable;
import java.util.Collections;

public class AutoConnectService extends Service {

    private static final String TAG = "AutoConnectService";

    private WifiManager wifiManager;

    @Override
    public void onCreate() {
        super.onCreate();
        wifiManager = (WifiManager) getApplicationContext().getSystemService(WIFI_SERVICE);
        Log.d(TAG, "Service onCreate");
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        String ssid = intent.getStringExtra("ssid");
        String password = intent.getStringExtra("password");
        Log.d(TAG, "Service onStartCommand, attempting to connect to: " + ssid);

        if (ssid != null && password != null) {
            connectWifi(ssid, password);
        } else {
            Log.e(TAG, "尝试连接但未提供SSID或密码");
            // 可以通过本地广播通知 Activity 连接失败
            // Toast.makeText(this, "连接失败：信息不完整", Toast.LENGTH_SHORT).show(); // 服务中Toast不可靠
        }

        // 对于一次性的连接请求，Service 可以停止自身。
        // 返回 START_NOT_STICKY 表示系统在Service被终止后不会尝试重新创建它。
        return START_NOT_STICKY; // 或者 START_REDELIVER_INTENT 如果希望在系统终止后重新发送 intent
    }

    private void connectWifi(String ssid, String password) {
        // 使用 addNetworkSuggestions (需要 Android Q / API 29+)
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
            try {
                WifiNetworkSuggestion suggestion = new WifiNetworkSuggestion.Builder()
                        .setSsid(ssid)
                        // 根据网络类型设置认证方式 (这里假设是 WPA/WPA2)
                        // 如果是开放网络，不需要设置 Passphrase
                        // 如果是 WEP，需要 setWepPassphrase
                        .setWpa2Passphrase(password)
                        .build();

                int status = wifiManager.addNetworkSuggestions(Collections.singletonList(suggestion));
                Log.d(TAG, "提交网络建议结果: " + status);

                // addNetworkSuggestions 只是提交建议，系统决定何时连接。
                // 连接结果会通过 NETWORK_STATE_CHANGED 广播通知 WifiReceiver。

                // 可以在这里发送一个本地广播通知 Activity "正在连接..."

            } catch (Exception e) {
                Log.e(TAG, "提交网络建议时发生异常: " + e.getMessage());
                // 可以在这里发送本地广播通知 Activity 连接失败
                // Toast.makeText(getApplicationContext(), "连接尝试失败: " + e.getMessage(), Toast.LENGTH_SHORT).show(); // 服务中Toast不可靠
            }
        } else {
            Log.w(TAG, "addNetworkSuggestions 仅支持 Android Q (API 29) 及以上版本，当前版本不支持此连接方式");
            // 可以在这里发送本地广播通知 Activity 不支持此功能
            // Toast.makeText(getApplicationContext(), "当前系统版本不支持此连接方式", Toast.LENGTH_SHORT).show(); // 服务中Toast不可靠
        }

        // Service 可以选择在这里停止自身，或者依赖系统在任务完成后停止。

    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null; // 这是个非绑定Service
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "Service onDestroy");
    }
}


